package myjdbc;

import java.sql.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: cty
 * @Date: 2020/1/21 19:31
 * @Description:  创建emp和dept数据表，向emp表中存入三条记录，并查询emp表内数据打印出来
 * 1 ORM(Object Relationship Mapping) 对象关系映射 基本思想：
 * （1）表结构跟类对应；表中字段和类的属性对应；表中记录和对象对应。（让javabean的属性名和类型尽量和数据库保持一致）
 * （2）一条记录对应一个对象，将这些查询到的对象放到容器中(List,Set,Map)
 * 2 封装总结：
 * （1）封装一条记录：Object[]、Map、JavaBean
 * （2）封装多条记录：List<?>、Map<String,?>
 * @version: 1.0
 */
public class JDBC_Demo10_SORM00 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            //1 加载数据库驱动  2 获取数据库连接
            conn = JDBCUtil.getMysqlConn();

            //3 操作数据库
            //（1）创建数据表emp和dept
            ps = conn.prepareStatement("CREATE TABLE if not exists `emp` (\n" +
                    "  `id` int(10) NOT NULL AUTO_INCREMENT,\n" +
                    "  `empname` varchar(20) DEFAULT NULL,\n" +
                    "  `salary` double DEFAULT NULL,\n" +
                    "  `birthday` date DEFAULT NULL,\n" +
                    "  `age` int(11) DEFAULT NULL,\n" +
                    "  `deptid` int(10) DEFAULT NULL,\n" +
                    "  PRIMARY KEY (`id`)\n" +
                    ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;");
            ps.executeUpdate();

            ps = conn.prepareStatement("CREATE TABLE if not exists `dept` (\n" +
                    "  `id` int(10) NOT NULL DEFAULT '0',\n" +
                    "  `dname` varchar(30) DEFAULT NULL,\n" +
                    "  `address` varchar(100) DEFAULT NULL,\n" +
                    "  PRIMARY KEY (`id`)\n" +
                    ") ENGINE=InnoDB DEFAULT CHARSET=utf8;");
            ps.executeUpdate();

            //（2）存入emp数据表三条记录
            String sql = "insert into emp (empname,salary,birthday,age,deptid) values (?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setObject(1,"张三");
            ps.setObject(2,30000);
            java.sql.Date bir = new java.sql.Date(str2stamp("2017-01-01"));
            ps.setObject(3,bir);
            ps.setObject(4,3);
            ps.setObject(5,1);
            ps.executeUpdate();

            sql = "insert into emp (empname,salary,birthday,age,deptid) values (?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setObject(1,"李四");
            ps.setObject(2,40000);
            bir = new java.sql.Date(str2stamp("2016-01-01"));
            ps.setObject(3,bir);
            ps.setObject(4,4);
            ps.setObject(5,1);
            ps.executeUpdate();

            sql = "insert into emp (empname,salary,birthday,age,deptid) values (?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setObject(1,"王五");
            ps.setObject(2,50000);
            bir = new java.sql.Date(str2stamp("2015-01-01"));
            ps.setObject(3,bir);
            ps.setObject(4,5);
            ps.setObject(5,2);
            ps.executeUpdate();

            //（3）查询emp数据表
            sql = "select * from emp";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();

            //4 处理返回数据
            while (rs.next()){
                System.out.println("姓名："+rs.getString("empname")+
                        "\t薪水："+rs.getString("salary")+
                        "\t生日："+rs.getString("birthday")+
                        "\t年龄："+rs.getString("age")+
                        "\t部门："+rs.getString("deptid"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            //5 关闭连接
            JDBCUtil.close(rs, ps, conn);
        }
    }

    /**
     * 将yy-MM-dd HH:mm:ss格式的时间字符串转化为时间戳
     * @param str
     * @return stamp
     */
    public static long str2stamp(String str){
        DateFormat df = new SimpleDateFormat("yy-MM-dd");
        java.util.Date date = null;
        try {
            date = df.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long stamp = date.getTime();
        return stamp;
    }
}

/* res:
姓名：张三	薪水：30000	生日：2017-01-01	年龄：3	部门：1
姓名：李四	薪水：40000	生日：2016-01-01	年龄：4	部门：1
姓名：王五	薪水：50000	生日：2015-01-01	年龄：5	部门：2
*/
